package com.hello.system.domain;

import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.hello.common.core.annotation.Excel;
import com.hello.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 活动信息对象 activities
 * 
 * @author hello
 * @date 2025-10-29
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class Activities extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 活动ID（主键） */
    private Long activityId;

    /** 活动标题 */
    @Excel(name = "活动标题")
    private String activityTitle;

    /** 活动图片URL列表（JSON数组） */
    @Excel(name = "活动图片URL列表", readConverterExp = "J=SON数组")
    private String activityImages;

    /** 活动类型（JSON，如运动、聚会、学习等） */
    @Excel(name = "活动类型", readConverterExp = "J=SON，如运动、聚会、学习等")
    private String activityType;

    /** 活动标签（JSON数组，如户外、线上、免费等） */
    @Excel(name = "活动标签", readConverterExp = "J=SON数组，如户外、线上、免费等")
    private String activityTags;

    /** 活动详情描述 */
    @Excel(name = "活动详情描述")
    private String activityDetails;

    /** 活动地点（文本描述） */
    @Excel(name = "活动地点", readConverterExp = "文=本描述")
    private String activityLocation;

    /** 活动坐标（经纬度地理位置） */
    @Excel(name = "活动坐标", readConverterExp = "经=纬度地理位置")
    private String activityCoordinates;

    /** 活动发布时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "活动发布时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date activityPublishTime;

    /** 活动分类（JSON，如户外运动、兴趣爱好、社交聚会等） */
    @Excel(name = "活动分类", readConverterExp = "J=SON，如户外运动、兴趣爱好、社交聚会等")
    private String activityCategory;

    /** 活动限制条件（JSON，如性别、年龄、等级等限制） */
    @Excel(name = "活动限制条件", readConverterExp = "J=SON，如性别、年龄、等级等限制")
    private String activityRestriction;

    /** 当前参与人数 */
    @Excel(name = "当前参与人数")
    private Long activityCurrentParticipants;

    /** 最大参与人数 */
    @Excel(name = "最大参与人数")
    private Long activityMaxParticipants;

    /** 发布者用户ID（关联users表） */
    @Excel(name = "发布者用户ID", readConverterExp = "关=联users表")
    private Long publisherId;

    /** 发布者头像URL */
    @Excel(name = "发布者头像URL")
    private String publisherAvatar;

    /** 发布者昵称 */
    @Excel(name = "发布者昵称")
    private String publisherNickname;

    /** 发布者个性签名 */
    @Excel(name = "发布者个性签名")
    private String publisherSignature;

    /** 发布者标签（JSON数组） */
    @Excel(name = "发布者标签", readConverterExp = "J=SON数组")
    private String publisherTags;

    /** 活动状态（JSON，如进行中、已结束、已取消等） */
    @Excel(name = "活动状态", readConverterExp = "J=SON，如进行中、已结束、已取消等")
    private String activityStatus;

    /** 记录状态（JSON，如已发布、已下架、已删除等） */
    @Excel(name = "记录状态", readConverterExp = "J=SON，如已发布、已下架、已删除等")
    private String status;

    /** 额外扩展数据（JSON格式，用于存储其他自定义信息） */
    @Excel(name = "额外扩展数据", readConverterExp = "J=SON格式，用于存储其他自定义信息")
    private String extraData;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date createdAt;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date updatedAt;

    public void setActivityId(Long activityId) 
    {
        this.activityId = activityId;
    }

    public Long getActivityId() 
    {
        return activityId;
    }
    public void setActivityTitle(String activityTitle) 
    {
        this.activityTitle = activityTitle;
    }

    public String getActivityTitle() 
    {
        return activityTitle;
    }
    public void setActivityImages(String activityImages) 
    {
        this.activityImages = activityImages;
    }

    public String getActivityImages() 
    {
        return activityImages;
    }
    public void setActivityType(String activityType) 
    {
        this.activityType = activityType;
    }

    public String getActivityType() 
    {
        return activityType;
    }
    public void setActivityTags(String activityTags) 
    {
        this.activityTags = activityTags;
    }

    public String getActivityTags() 
    {
        return activityTags;
    }
    public void setActivityDetails(String activityDetails) 
    {
        this.activityDetails = activityDetails;
    }

    public String getActivityDetails() 
    {
        return activityDetails;
    }
    public void setActivityLocation(String activityLocation) 
    {
        this.activityLocation = activityLocation;
    }

    public String getActivityLocation() 
    {
        return activityLocation;
    }
    public void setActivityCoordinates(String activityCoordinates) 
    {
        this.activityCoordinates = activityCoordinates;
    }

    public String getActivityCoordinates() 
    {
        return activityCoordinates;
    }
    public void setActivityPublishTime(Date activityPublishTime) 
    {
        this.activityPublishTime = activityPublishTime;
    }

    public Date getActivityPublishTime() 
    {
        return activityPublishTime;
    }
    public void setActivityCategory(String activityCategory) 
    {
        this.activityCategory = activityCategory;
    }

    public String getActivityCategory() 
    {
        return activityCategory;
    }
    public void setActivityRestriction(String activityRestriction) 
    {
        this.activityRestriction = activityRestriction;
    }

    public String getActivityRestriction() 
    {
        return activityRestriction;
    }
    public void setActivityCurrentParticipants(Long activityCurrentParticipants) 
    {
        this.activityCurrentParticipants = activityCurrentParticipants;
    }

    public Long getActivityCurrentParticipants() 
    {
        return activityCurrentParticipants;
    }
    public void setActivityMaxParticipants(Long activityMaxParticipants) 
    {
        this.activityMaxParticipants = activityMaxParticipants;
    }

    public Long getActivityMaxParticipants() 
    {
        return activityMaxParticipants;
    }
    public void setPublisherId(Long publisherId) 
    {
        this.publisherId = publisherId;
    }

    public Long getPublisherId() 
    {
        return publisherId;
    }
    public void setPublisherAvatar(String publisherAvatar) 
    {
        this.publisherAvatar = publisherAvatar;
    }

    public String getPublisherAvatar() 
    {
        return publisherAvatar;
    }
    public void setPublisherNickname(String publisherNickname) 
    {
        this.publisherNickname = publisherNickname;
    }

    public String getPublisherNickname() 
    {
        return publisherNickname;
    }
    public void setPublisherSignature(String publisherSignature) 
    {
        this.publisherSignature = publisherSignature;
    }

    public String getPublisherSignature() 
    {
        return publisherSignature;
    }
    public void setPublisherTags(String publisherTags) 
    {
        this.publisherTags = publisherTags;
    }

    public String getPublisherTags() 
    {
        return publisherTags;
    }
    public void setActivityStatus(String activityStatus) 
    {
        this.activityStatus = activityStatus;
    }

    public String getActivityStatus() 
    {
        return activityStatus;
    }
    public void setStatus(String status) 
    {
        this.status = status;
    }

    public String getStatus() 
    {
        return status;
    }
    public void setExtraData(String extraData) 
    {
        this.extraData = extraData;
    }

    public String getExtraData() 
    {
        return extraData;
    }
    public void setCreatedAt(Date createdAt) 
    {
        this.createdAt = createdAt;
    }

    public Date getCreatedAt() 
    {
        return createdAt;
    }
    public void setUpdatedAt(Date updatedAt) 
    {
        this.updatedAt = updatedAt;
    }

    public Date getUpdatedAt() 
    {
        return updatedAt;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("activityId", getActivityId())
            .append("activityTitle", getActivityTitle())
            .append("activityImages", getActivityImages())
            .append("activityType", getActivityType())
            .append("activityTags", getActivityTags())
            .append("activityDetails", getActivityDetails())
            .append("activityLocation", getActivityLocation())
            .append("activityCoordinates", getActivityCoordinates())
            .append("activityPublishTime", getActivityPublishTime())
            .append("activityCategory", getActivityCategory())
            .append("activityRestriction", getActivityRestriction())
            .append("activityCurrentParticipants", getActivityCurrentParticipants())
            .append("activityMaxParticipants", getActivityMaxParticipants())
            .append("publisherId", getPublisherId())
            .append("publisherAvatar", getPublisherAvatar())
            .append("publisherNickname", getPublisherNickname())
            .append("publisherSignature", getPublisherSignature())
            .append("publisherTags", getPublisherTags())
            .append("activityStatus", getActivityStatus())
            .append("status", getStatus())
            .append("extraData", getExtraData())
            .append("createdAt", getCreatedAt())
            .append("updatedAt", getUpdatedAt())
            .toString();
    }
}
